package 周赛._279;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @author 会玩的洋洋
 * https://leetcode-cn.com/problems/smallest-value-of-the-rearranged-number/submissions/
 */
public class _6001_重排数字的最小值 {
    /**
     * 模拟  根据正负数的不同，进行划分
     * 先存储数字是否为正数还是负数  之后将num 一个一个取出 存入list
     * 再将list 升序排列
     * 若为正数， 需要判断有几个 0 再将0放到第二位中
     * 负数则直接取出即可
     * @param num 目标数字
     * @return long
     */
    public long smallestNumber(long num) {
        List<Long> list = new ArrayList<>();
        int check = 1;
        int zeroCount = 0;
        if (num < 0) {
            check = -1;
        }
        num = Math.abs(num);
        long ans = 0;
        // 划分出来  将各个数存入数组
        while (num != 0) {
            long x = num % 10;
            list.add(x);
            num /= 10;
        }

        // 对数组进行排序
        Collections.sort(list);

        // 正数情况
        if (check > 0) {
            for (Long aLong : list) {
                // 记录为 0 的数量
                if (ans == 0 && aLong == 0) {
                    zeroCount++;
                } else if (zeroCount != 0) {
                    // 将 0 放在第二位数中
                    ans = aLong;
                    for (int j = 0; j < zeroCount; j++) {
                        ans *= 10;
                    }
                    zeroCount = 0;
                } else {
                    // 正常处理
                    ans = ans * 10 + aLong;
                }
            }
        } else {
            // 负数情况
            for (int i = list.size() - 1; i >= 0; i--) {
                // 正常处理
                ans = ans * 10 + list.get(i);
            }
        }

        return ans * check;
    }
}
